package com.seecen.HJM.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.seecen.HJM.model.dto.SongAddDto;
import com.seecen.HJM.model.dto.SongAndArtistDto;
import com.seecen.HJM.model.dto.SongDto;
import com.seecen.HJM.model.dto.SongUpdateDto;
import com.seecen.HJM.model.entity.Song;
import com.seecen.HJM.model.vo.SongAdminVo;
import com.seecen.HJM.model.vo.SongDetailVo;
import com.seecen.HJM.model.vo.SongVo;
import com.seecen.HJM.result.DataVo;
import com.seecen.HJM.result.PageResult;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

/**
 * @author TOYA
 * &#064;description  针对表【tb_song】的数据库操作Service
 * &#064;createDate  2025-09-26 14:39:18
 *
 */
public interface SongService extends IService<Song> {


    //添加歌曲信息 SongDto歌曲元信息
    DataVo addSong(SongAddDto songAddDto);

    //更新歌曲信息
    DataVo updateSong(SongUpdateDto songUpdateDto);

    //获取所有歌曲
    DataVo<PageResult<SongVo>> getAllSongs(SongDto songDto, HttpServletRequest request);

    //获取推荐歌曲
    DataVo<List<SongVo>> getRecommendedSongs(HttpServletRequest request);

    // 根据id获取歌曲详情
    DataVo<SongDetailVo> getSongDetail(Long songId, HttpServletRequest request);

    // 获取所有歌曲数量
    DataVo<Long> getAllSongsCount(String style);

    // 上传歌曲封面
    DataVo updateSongCover(Long songId, String coverUrl);

    // 上传歌曲音频
    DataVo updateSongAudio(Long songId, String audioUrl);

    //上传歌曲歌词
    DataVo updateSongLyric(Long songId, String lyricUrl);

    //删除歌曲
    DataVo deleteSong(Long songId);

    //批量删除歌曲
    DataVo deleteSongs(List<Long> songIds);

    // 根据歌手获取所有歌曲
    DataVo<PageResult<SongAdminVo>> getAllSongsByArtist(SongAndArtistDto songDTO);


    IPage<Song> getLikedSongsPage(IPage<Song> page1, QueryWrapper<Song> queryWrapper1);
}
